package com.tianqu.tms.www.transfer.controller;

import java.util.List;

import com.tianqu.tms.core.base.Logger;
import com.tianqu.tms.core.base.TmsController;
import com.tianqu.tms.core.base.TxController;
import com.tianqu.tms.core.base.UserContext;
import com.tianqu.tms.core.exception.TmsException;
import com.tianqu.tms.core.exception.TransactionException;
import com.tianqu.tms.core.security.TmsUserProfile;
import com.tianqu.tms.core.util.TmsConstants;
import com.tianqu.tms.dao.InfoChangeHistoryDao;
import com.tianqu.tms.dao.InfoChangeHistoryDaoImp;
import com.tianqu.tms.dao.TmsDao;
import com.tianqu.tms.dao.TmsTransferFinanceDetailDao;
import com.tianqu.tms.dao.TmsTransferFinanceDetailDaoImp;
import com.tianqu.tms.dao.TransferProcessHistoryDaoImp;
import com.tianqu.tms.dto.FinanceDetailDto;
import com.tianqu.tms.dto.InfoChangeHistoryDto;
import com.tianqu.tms.dto.TransferProcessHistoryDto;
import com.tianqu.tms.entity.Member;
import com.tianqu.tms.entity.TransferAcceptedInfo;
import com.tianqu.tms.www.transfer.viewhelper.TransferRgInputViewHelper;

public class PChangeTableInputResultController extends TmsController {
	private Logger logger = Logger
	.getLogger(PChangeTableInputResultController.class);
	@Override
	public void execute(UserContext uc) throws Exception {
		logger.debug(this.getClass().getName() + "#execute was called.");
		TxController controller = getTxController();
		try {
			controller.begin();
			TransferRgInputViewHelper view = (TransferRgInputViewHelper) uc.getAttribute(TmsConstants.VIEWHELP);
			TmsUserProfile profile = uc.getUserProfile();
			TransferAcceptedInfo accept = new TransferAcceptedInfo();
//			accept = accept.getAllAcceptInfoBySerial(view.getSerial(),"");
			List<TransferAcceptedInfo> infoList = accept.getAcceptInfoList(view.getSerial(), "");
			if (infoList != null && infoList.size() == 1) {
			    accept = infoList.get(0);
			} else {
			    return;
			}
//			TmsChange change =new TmsChange();
			if((view.getLsCarOwnerIdCardNo()!=null && !"".equals(view.getLsCarOwnerIdCardNo()))
					||(view.getLsOwnerAddress()!=null && !"".equals(view.getLsOwnerAddress()))
					||(view.getLsPhone()!=null && !"".equals(view.getLsPhone()))
					||(view.getLsZipCode()!=null && !"".equals(view.getLsZipCode()))
					||(view.getLsMailAddress()!=null && !"".equals(view.getLsMailAddress()))
					||(view.getLsPrivence()!=null && !"".equals(view.getLsPrivence())&&!"省".equals(view.getLsPrivence()))
					||(view.getLsCity()!=null && !"".equals(view.getLsCity())&&!"市".equals(view.getLsCity()))
					||(view.getOwnerName()!=null && !"".equals(view.getOwnerName()))
					||(view.getOwnerTel()!=null && !"".equals(view.getOwnerTel()))
					||(view.getLzCheckBox()!=null && !"".equals(view.getLzCheckBox())))				
			{	
			    
//				if(accept.getMarketType()==1)
//				{
//					Car car = new Car();
//					car = car.findCarBySerial(accept.getBasicCarId());
//					if(view.getLsCarOwnerIdCardNo()!=null && !"".equals(view.getLsCarOwnerIdCardNo()))
//					{
//						car.setCarOwnerIdCardNo(view.getLsCarOwnerIdCardNo());
//					}
//					if(view.getLsOwnerAddress()!=null && !"".equals(view.getLsOwnerAddress()))
//					{
//						car.setOwnerAddress(view.getLsOwnerAddress());
//					}
//					if(view.getLsPhone()!=null && !"".equals(view.getLsPhone()))
//					{
//						car.setOwnerPhone(view.getLsPhone());
//					}
//					car.updateMarketCarInfo(car);
//				}
//				if(accept.getMarketType() == 2)
//				{
//					TransferPersonalCarInfo person = new TransferPersonalCarInfo();
//					person = person.getPersonalCarInfoBySerial(accept.getBasicCarId());
//					if(view.getLsCarOwnerIdCardNo()!=null && !"".equals(view.getLsCarOwnerIdCardNo()))
//					{
//						person.setCarOwnerIdCardNo(view.getLsCarOwnerIdCardNo());
//					}
//					if(view.getLsOwnerAddress()!=null && !"".equals(view.getLsOwnerAddress()))
//					{
//						person.setOwnerAddress(view.getLsOwnerAddress());
//					}
//					if(view.getLsPhone()!=null && !"".equals(view.getLsPhone()))
//					{
//						person.setOwnerPhone(view.getLsPhone());
//					}	
//					if(person!=null) person.updateCarBaseInfo(person);
//				}
//              accept.setCarOwnerIdCardNo(view.getLsCarOwnerIdCardNo());
//              accept.setOwnerAddress(view.getLsOwnerAddress());
//              accept.setOwnerPhone(view.getLsPhone());
//              accept.setMailAddress(view.getLsMailAddress());
//              accept.setZipCode(view.getLsZipCode());
//              if(!"省".equals(view.getLsPrivence()))
//              {
//                  accept.setMoveOutProvince(view.getLsPrivence());
//              }else{
//                  accept.setMoveOutProvince("");
//              }
//              if(!"市".equals(view.getLsCity()))
//              {   
//                  accept.setMoveOutCity(view.getLsCity());
//              }else{
//                  accept.setMoveOutCity("");
//              }
			    /*
			     * 3）页面项目至少有一项录入情况： 点击按钮【打印变更表】，更新数据库表，具体更新如下：
                 * 更新“过户业务基本信息表 (tms_transfer_accepted_info)”
                 * # 变更表原车主车主身份证/信用代码变更（changesVacate）：为 2，否。
                 * # 机动车所有人姓名/名称变更（changeColor）：为 2，否。
                 * # 变更表打印缴费状态（changeEngine）：为 2，否。
                 * # 变更表打印时间（infoChangeTime）：为当前系统时间。
                 * # 更新时间（updateTime）：为当前系统时间
                 * # 更新用户（updateUserId）：为当前登录用户id
			     */
			    accept.setChangesVacate(2);
			    accept.setChangeColor(2);
			    accept.setChangeEngine(2);
				accept.setUpdateUserId(profile.getUniqueId());
				accept.setSerial(view.getSerial());
				accept.updateChangeTableBySerial(accept);
				/*
				 * 4）插入“变更表打印记录表 (tms_InfoChange_history)”
                 * # 过户流水号（serial）：为过户业务基本信息表 (tms_transfer_accepted_info)对应的流水号
                 * # 原车主身份证类别（cardType）：为页面所选的身份证类别。
                 * # 原车主车主身份证/信用代码（ownerCardNo）：为页面输入的值。
                 * #  原车主电话（ownerPhone）:为页面输入的值。
                 * #  原车主地址（ownerAddress）：为页面输入的值。
                 * # 原车主邮编（ownerZipCode）：为页面输入的值。
                 * # 原车主邮寄地址（ownerMailAddress）：为页面输入的值。
                 * # 迁出车管所为转入车管所（市）（carMarketInCity）关联的城市表（tms_city）的车管所名字（vaoName）
                 * # 变更机动车所有人姓名/名称（carOwner）：为页面输入的值。
                 * # 共同所有的机动车变更所有人（changeOwner）：为页面输入的值。
                 * # 变更表打印人（insertUserid）：为变更表打印用户对应的tms_user的id值。
                 * # 变更表打印时间（insertTime：为当前系统时间。
				 */
				// 表没了?
				InfoChangeHistoryDao infoDao = (InfoChangeHistoryDao)InfoChangeHistoryDaoImp.getInstance(TmsDao.TMS_INFOCHANGE_HISTORY);
				InfoChangeHistoryDto infoDto = new InfoChangeHistoryDto();
				infoDto.setSerial(view.getSerial());
				if ("1".equals(accept.getCarType())) {

	                infoDto.setCardType("居民身份证");   
				} else if ("2".equals(accept.getCarType())) {

	                infoDto.setCardType("临时身份证");
				} else if ("3".equals(accept.getCarType())) {

	                infoDto.setCardType("信用代码证");
				}
				infoDto.setOwnerCardNo(view.getLsCarOwnerIdCardNo());
				infoDto.setOwnerPhone(view.getOwnerPhone());
				infoDto.setOwnerAddress(view.getOwnerAddress());
				infoDto.setOwnerZipCode(view.getLsZipCode());
				infoDto.setOwnerMailAddress(view.getLsMailAddress());
				infoDto.setCarMarketInCity(view.getVaoName());
				infoDto.setCarOwner(view.getCarOwner());
				infoDto.setChangeOwner(view.getOwnerTel());
				infoDto.setInsertUserid(profile.getUniqueId());
				
				infoDao.insertInfoChangeHistory(infoDto);
				/*
				 * 5）插入"过户流程操作记录表（tms_transfer_process_history）"
                 * # 车辆流水号（serial）：为对应的车辆流水号。
                 * # 业务类型（businessType）：50，打印变更表
                 * # 业务受理人（insertUserId）：为变更表打印用户对应的tms_user的id值。
                 * # 业务受理时间（insertTime）：为当前系统时间
				 */
				//插入 过户流程操作记录表（tms_transfer_process_history）
                TransferProcessHistoryDto transferProcessHistoryDto = new TransferProcessHistoryDto();
                transferProcessHistoryDto.setBusinessType(50);
                transferProcessHistoryDto.setInsertUserId(profile.getUniqueId());
                String serial = view.getSerial();
                transferProcessHistoryDto.setSerial(serial);
                TransferProcessHistoryDaoImp transferProcessHistoryDao = (TransferProcessHistoryDaoImp) TransferProcessHistoryDaoImp.getInstance(TmsDao.TMS_TRANSFER_PROCESS_HISTORY);
                transferProcessHistoryDao.insertHisInfoBySerial(transferProcessHistoryDto);
                
                /*
                 * 7）自动扣费规则。
                 * 如果操作人类型是商户会员，即“当前操作人对应tms_user表的userType为：2，商户会员”
                 * 当“原车主身份证类别"为：3，信用代码，且原车主车主身份证/信用代码有值，计费50元
                 * 当”变更机动车所有人姓名/名称“有值，计费50元
                 * 其他项目计费0元
                 * 根据页面输入的修改值，
                 * 更新“商户会员信息数据表（tms_member）”，过户费余额（virtualMargin）=原过户费余额（virtualMargin）-计费总和”的值。
                 * 7）插入 “过户业务财务收费明细表（tms_transfer_finance_detail）”
                 * # 车辆流水号（serial）为关联的过户业务基本信息表（tms_transfer_accepted_info）的车辆流水号（serial）
                 * # 费用类型（priceType）为：页面所修改对应的类型
                 * # 处理方式（priceChargeType）为“3：过户充值”
                 * # 处理类型（priceWay）为“1：收费”
                 * # 费用金额（price）为“计费总和的值
                 * # 处理日期（priceDate）为当前系统时间
                 * # 操作员ID（priceUserId）为当前操作用户ID 
                 */
                int tempPrice = 0;
                FinanceDetailDto financeDetailDto = new FinanceDetailDto();
                financeDetailDto.setSerial(serial);
                if (profile.getUserType() == 2) {
//                    financeDetailDto.setPriceType(1);
                    financeDetailDto.setPriceWay(1);
                    financeDetailDto.setPrice(50);
                    financeDetailDto.setPriceChangeType(3);
                    financeDetailDto.setPriceUserId(profile.getUniqueId());
                    if ("3".equals(view.getLzCheckBox())) {
                        tempPrice += 50;

                      financeDetailDto.setPriceType(2);
//                      financeDetailDto.setPriceWay(1);
//                      financeDetailDto.setPrice(50);
//                      financeDetailDto.setPriceUserId(profile.getUniqueId());
                      TmsTransferFinanceDetailDao financeDetailDao = (TmsTransferFinanceDetailDao)TmsTransferFinanceDetailDaoImp.getInstance(TmsDao.TMS_TRANSFER_FINANCE_DETAIL);
                      financeDetailDao.insertFinanceDetail(financeDetailDto);
                    }
                    if (view.getOwnerName() != null && !view.getOwnerName().isEmpty()) {
                        tempPrice += 50;
                        financeDetailDto.setPriceType(1);
//                        financeDetailDto.setPriceWay(1);
//                        financeDetailDto.setPrice(50);
//                        financeDetailDto.setPriceUserId(profile.getUniqueId());
                        TmsTransferFinanceDetailDao financeDetailDao = (TmsTransferFinanceDetailDao)TmsTransferFinanceDetailDaoImp.getInstance(TmsDao.TMS_TRANSFER_FINANCE_DETAIL);
                        financeDetailDao.insertFinanceDetail(financeDetailDto);
                    }
                    if (tempPrice != 0) {
                        Member member = Member.getInstance();
                        member = member.findMemberInfoByUserId(profile.getLoginId());
//                        String memberId = view.getMemberId();
    //                    int virtualprice = virtualMargin - checkPrice - transferPrice;
                        int virtualprice = Integer.valueOf(member.getVirtualMargin()) - tempPrice;
                        //更新 会员基本信息数据表（tms_member）
                        member.updateMemberVirtualMarginByUserId(profile.getLoginId(),virtualprice);
                    }
                }
                

                
                /*
				//追加登记信息变更表（tms_change）
				change.setSerial(accept.getSerial());
				change.setPrintType(1);
				change.setOwnerIdCardNo(view.getLsCarOwnerIdCardNo());
				change.setOwnerAddress(view.getLsOwnerAddress());
				change.setOwnerPhone(view.getLsPhone());
				change.setOwnerName(view.getOwnerName());
				change.setOwnerTel(view.getOwnerTel());
				if(view.getLsZipCode()!=null && !"".equals(view.getLsZipCode()))
				{
					change.setOwnerZipCode(Integer.parseInt(view.getLsZipCode()));
				}else{
					change.setOwnerZipCode(0);
				}
				change.setMailAddress(view.getLsMailAddress());
				change.setInsertUserId(profile.getUniqueId());
				if(!"省".equals(view.getLsPrivence()))
				{
					change.setMoveOutProvince(view.getLsPrivence());
				}else{
					change.setMoveOutProvince("");
				}
				if(!"市".equals(view.getLsCity()))
				{	
					change.setMoveOutCity(view.getLsCity());
				}else{
					change.setMoveOutCity("");
				}
				change.insertChangeInfo(change);	
				*/
			}else{
			    /*
				change.setSerial(accept.getSerial());
				change.setPrintType(1);
				change.setOwnerIdCardNo(view.getLsCarOwnerIdCardNo());
				change.setOwnerAddress(view.getLsOwnerAddress());
				change.setOwnerPhone(view.getLsPhone());
				change.setOwnerName(view.getOwnerName());
				change.setOwnerTel(view.getOwnerTel());
				if(view.getLsZipCode()!=null && !"".equals(view.getLsZipCode()))
				{
					change.setOwnerZipCode(Integer.parseInt(view.getLsZipCode()));
				}else{
					change.setOwnerZipCode(0);
				}
				change.setMailAddress(view.getLsMailAddress());
				change.setInsertUserId(profile.getUniqueId());
				if(!"省".equals(view.getLsPrivence()))
				{
					change.setMoveOutProvince(view.getLsPrivence());
				}else{
					change.setMoveOutProvince("");
				}
				if(!"市".equals(view.getLsCity()))
				{	
					change.setMoveOutCity(view.getLsCity());
				}else{
					change.setMoveOutCity("");
				}
				change.insertChangeInfo(change);
				*/				
			}
			logger.debug(this.getClass().getName() + "#execute was completed.");
			controller.commit();
		} catch (Exception e) {
			try {
				controller.rollback();
			} catch (TransactionException e1) {
				throw new TmsException(TmsException.DB_TXCRROR, e1);
			}
			// 系统异常
			if (e instanceof TmsException) {
				throw e;
			}
			throw new TmsException(TmsException.DB_TXCRROR, e);
		}
	}
}
